////
////  MoNodeCtrDemo.swift
////  soapp_Example
////
////  Created by zhuxietong on 2018/9/28.
////  Copyright © 2018 CocoaPods. All rights reserved.
////
//
//import Foundation
//import AsyncDisplayKit
//import Kingfisher
//import Eelay
//import JoLoading
//
//extension MoNodeController
//{
//    public static var autoClearMemoryCache = false
//}
//
//public protocol MoBottomNodeSpec:NSObjectProtocol{
//    func bottomSpecGetter()->_Spec?
//    
//    
//}
//
//
//
//
//
//open class MoContentNode: MoDisplayNode,MoBottomNodeSpec {
//    
//    open func bottomSpecGetter() -> _Spec?{
//        if let spec = bottom_delegate?.bottomSpecGetter()
//        {
//            return spec
//        }
//        return nil
//    }
//    
//    open var deviceBottomEdgeJust:CGFloat{
//        get {
//            if #available(iOS 11, *) {
//                var bottomHeight = TP.bottomLayoutGuide
//                if bottomHeight > 10{
//                    bottomHeight = -bottomHeight/2.0 - 4
//                }
//                else{
//                    bottomHeight = 0
//                }
//                if bottomHeight < 0
//                {
//                    bottomHeight = -bottomHeight
//                }
//                return bottomHeight
//            }
//            return 0
//        }
//    }
//    
//    public weak var bottom_delegate:MoBottomNodeSpec? = nil
//    
//    
//    public var node = MoDisplayNode()
//    public var bottomNode = MoBottomNode(){
//        didSet{
//            bottomNode.bottom_delegate = self
//        }
//    }
//    open override func addLayoutRules() {
//        backgroundColor = .white
//        bottomNode.bottom_delegate = self
//        
//    }
//    
//    
//    open override func specGetter()->_Spec{
//        var items = [node[_grow(1),_shrink(1)]]
//        if let _ = self.bottom_delegate?.bottomSpecGetter(){
//            items.append(bottomNode.Spec)
//        }
//        var height:CGFloat = 0
//        if let _ = bottom_delegate?.bottomSpecGetter(){
//            height = deviceBottomEdgeJust
//        }
//        
//        let stack = _Spec.stack(["v",&-.stretch,[0,0,height,0]], childs: items)
//        return stack
//    }
//    
//    
//}
//
//open class MoBottomNode: MoDisplayNode {
//    
//    public weak var bottom_delegate:MoBottomNodeSpec? = nil
//    
//    var contentNode = ASDisplayNode()
//    public var __topline = ASDisplayNode()
//    public var __line = ASDisplayNode()
//    
//    public var __touchBt = ASButtonNode()
//    
//    public var separatorTopHeight: CGFloat = TP.separatorHeight
//    public var separatorTopColor: UIColor = UIColor.separator_color
//    
//    public var separatorHeight: CGFloat = 0
//    public var separatorColor: UIColor = UIColor.separator_color
//    
//    
//    public var haveBottom = false
//    
//    open override func addLayoutRules() {
//        backgroundColor = .white
//    }
//    
//    open override func specGetter()->_Spec{
//        if let spec = bottom_delegate?.bottomSpecGetter(){
//            self.haveBottom = true
//            return spec
//        }
//        else{
//            
//            self.haveBottom = false
//            return _Spec.stack([], childs: [])
//        }
//    }
//    override open func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec {
//        
//        
//        let lay = fastLayoutSpec(_spec: specGetter())
//        
//        if !haveBottom{
//            separatorTopHeight = 0
//        }
//        
//        let haveSpec = (separatorTopHeight > 0) || (separatorHeight > 0)
//        
//        if haveSpec
//        {
//            //            let insetSpec = ASInsetLayoutSpec(insets: self.separatorInset, child: __line)
//            var childs = [ASLayoutElement]()
//            if separatorTopHeight > 0
//            {
//                __topline.backgroundColor = separatorTopColor
//                __topline.style.height = ASDimension(unit: .points, value: separatorTopHeight)
//                __topline.style.flexShrink = 1
//                childs.append(__topline)
//            }
//            childs.append(lay)
//            if separatorHeight > 0
//            {
//                __line.backgroundColor = separatorColor
//                __line.style.height = ASDimension(unit: .points, value: separatorHeight)
//                __line.style.flexShrink = 1
//                childs.append(__line)
//            }
//            
//            let spec = ASStackLayoutSpec(direction: .vertical, spacing: 0, justifyContent: .start, alignItems: .stretch, children: childs)
//            return spec
//        }
//        
//        return lay
//    }
//    
//}
//
//open class MoNodeController:ASViewController<ASDisplayNode>,MoAtrributeProtocol,MoRequestTask,LoadingPresenter,EeTopStyleSupport,MoBottomNodeSpec
//{
//    open func mo_set_controller(controller: UIViewController) {
//        
//    }
//    
//    open func mo_change_localizable(obj: Any?) {
//        
//    }
//    
//    
//    open func bottomSpecGetter() -> _Spec?{
//        return nil
//    }
//    
//    
//    
//    open var initTopStyle: EeTopStyle{
//        get{
//            return EeTopStyle.default
//        }
//    }
//    
//    open var LoadingPresenterBg: UIView{
//        get{
//            return self.node.view
//        }
//    }
//    
//    public var contentNode = MoContentNode()
//    
//    var __loadingNode:ASDisplayNode? = nil
//    
//    public var loadingNode:ASDisplayNode{
//        get{
//            if let load = self.__loadingNode{
//                return load
//            }else{
//                let loadV = self.LoadingClass.init()
//                let __node = ASDisplayNode(viewBlock: { () -> UIView in
//                    return loadV
//                })
//                __loadingNode = __node
//                return __node
//            }
//            
//        }
//    }
//    
//    
//    public var loadingV: JoLoading{
//        get{
//            
//            if __loadingNode == nil{
//                let loadV = self.LoadingClass.init()
//                self.__loadingNode = ASDisplayNode(viewBlock: { () -> UIView in
//                    return loadV
//                })
//            }
//            return self.__loadingNode!.view as! JoLoading
//        }
//    }
//    
//    
//    
//    
//    
//    
//    public static var IDActiveAction:((UIViewController,String,NSMutableDictionary) -> Void) = {_,_,_ in}
//    
//    public var appearStatus:AppearStatus = .none
//    
//    public var presentType:NavPresentType = .defaultPush
//    
//    public var bottomNode:MoBottomNode = MoBottomNode()
//    
//    public init() {
//        
//        super.init(node: ASDisplayNode())
//        initBegin()
//        contentNode.bottom_delegate = self
//        self.title = "Layout Example"
//        self.node.automaticallyManagesSubnodes = true
//        self.node.layoutSpecBlock = { [weak self] node, constrainedSize in
//            guard let ws = self else {
//                
//                return ASLayoutSpec()
//            }
//            return ws.quickLayoutSpec(node: node, constrainedSize: constrainedSize)
//        }
//        InitEnd()
//        
//    }
//    
//    open func InitEnd(){
//    }
//    
//    open func initBegin(){
//        
//    }
//    
//    
//    
//    
//    open func quickLayoutSpec(node:ASDisplayNode,constrainedSize:ASSizeRange)->ASLayoutSpec{
//        
//        let spec = ASOverlayLayoutSpec(child: contentNode, overlay: ASWrapperLayoutSpec(layoutElement: loadingNode))
//        return spec
//    }
//    
//    
//    
//    open override func viewDidAppear(_ animated: Bool) {
//        super.viewDidAppear(animated)
//        self.appearStatus = .appeared
//        
//    }
//    
//    
//    
//    
//    open override func viewDidLoad() {
//        
//        super.viewDidLoad()
//        switch self.presentType {
//        case .navRootPresent:
//            _ = UIButton()
//            let bundle = Bundle(for: EeLoginCtr.self)
//            let canleImg = UIImage(named: "delete_tag", in: bundle, compatibleWith: nil)
//            let bt = UIBarButtonItem(image: canleImg, style: .plain, target: self, action: #selector(dismissAction))
//            
//            self.navigationItem.leftBarButtonItem = bt
//        default:
//            break
//        }
//        
//        
//        
//    }
//    
//    @objc open func dismissAction(){
//        switch self.presentType {
//        case .navRootPresent:
//            self.navigationController?.dismiss(animated: true, completion:nil)
//        case .backSkip(let step):
//            self.popController(step)
//        default:
//            self.navigationController?.popViewController(animated: true)
//        }
//    }
//    
//    
//    
//    open override func viewWillAppear(_ animated: Bool) {
//        super.viewWillAppear(animated)
//        self.appearStatus = .appearing
//    }
//    
//    open override func viewDidDisappear(_ animated: Bool) {
//        super.viewDidDisappear(animated)
//        self.appearStatus = .disappeared
//    }
//    
//    open override func viewWillDisappear(_ animated: Bool) {
//        super.viewWillDisappear(animated)
//        self.appearStatus = .disappearing
//    }
//    
//    public required init?(coder aDecoder: NSCoder) {
//        super.init(coder: aDecoder)
//    }
//    
//    open func mo_model_reload() {
//        
//    }
//    
//    open func mo_detail_reload() {
//        
//    }
//    
//    open func mo_request_send() {
//        
//    }
//    
//    
//    open func mo_request_load(obj: Any) {
//        
//    }
//    
//    public func mo_request_alert(msg: String, title: String, bt_title: String) {
//        weak var wself = self
//        if bt_title.len < 1
//        {
//            loadingV.show(message: msg, title: title)
//            return
//        }
//        self.loadingV.handle(message: msg, title: title, button: bt_title, handAction: {
//            wself?.loadingV.loading()
//            wself?.mo_request_send()
//        })
//    }
//    
//    
//    
//}
//
//
//
//
//
